﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Chilis.Franquicias.EnEntidad;
using Chilis.Franquicias.Common;
using Chilis.Franquicias.Web.ServiceControler;
using Chilis.Franquicias.Web.Models.ViewModel;

namespace Chilis.Franquicias.Web.Controllers
{
    public class SolicitudController : Controller
    {
        //
        // GET: /Solicitud/

        public ActionResult Buscar()
        {
            CandidatoViewModel oCandidatoViewModel = new CandidatoViewModel();
            oCandidatoViewModel.FQ_Candidato = new FQ_Candidato();
            oCandidatoViewModel.ListaFQ_TipoCandidato = new ListaFQ_TipoCandidato();
            oCandidatoViewModel.ListaFQ_TipoDocumento = new ListaFQ_TipoDocumento();

            oCandidatoViewModel.ListaFQ_TipoCandidato = CandidatoServiceControler.ListaTipoCandidato();
            oCandidatoViewModel.ListaFQ_TipoDocumento = CandidatoServiceControler.ListaTipoDocumento();
            return View(oCandidatoViewModel);
        }

        public ActionResult BuscarCandidatoSolisitudPV_Grilla(Int32 PTipoCandidato_ID = Constantes.ValorCero, Int32 PTipoDocumento_ID = Constantes.ValorCero, String PnumeroDocumento = Constantes.ValorDefecto, String PNombre = Constantes.ValorDefecto, String sort = "FQ_Candidato_ID", int page = 0, String sortDir = "DESC")
        {
            int pageIndex = page;
            CandidatoViewModel oCandidatoViewModel = new CandidatoViewModel();
            if (page == Constantes.ValorCero || page == Constantes.MenosUno)
            {
                oCandidatoViewModel.FQ_Candidato = new FQ_Candidato()
                {
                    FQ_TipoDocumento = new FQ_TipoDocumento()
                    {
                        TipoDocumento_ID = PTipoDocumento_ID
                    },
                    FQ_TipoCandidato = new FQ_TipoCandidato()
                    {
                        TipoCandidato_ID = PTipoCandidato_ID
                    },
                    NumeroDocumento = PnumeroDocumento,
                    Nombre = PNombre,
                };
            }

            if (page != Constantes.MenosUno && !(page > Constantes.ValorUno))
            {
                page = Constantes.ValorUno;
            }
            bool sw = false;
            if (page == Constantes.MenosUno)
            {
                page = Constantes.ValorUno;
                sw = true;
                Session["oCandidatoViewModel.FQ_Candidato"] = null;
            }

            if (oCandidatoViewModel == null)
            {
                oCandidatoViewModel = new CandidatoViewModel();
            }

            if (Session["oCandidatoViewModel.FQ_Candidato"] == null)
            {
                Session["oCandidatoViewModel.FQ_Candidato"] = oCandidatoViewModel.FQ_Candidato;
            }
            else
            {
                oCandidatoViewModel.FQ_Candidato = (FQ_Candidato)Session["oCandidatoViewModel.FQ_Candidato"];
            }
            int Total;

            int candidatoPorPagina = Constantes.RegistrosPorPagina;
            if (page == Constantes.ValorUno) { page = Constantes.ValorCero; } else { page = ((page - Constantes.ValorUno) * candidatoPorPagina) + Constantes.ValorUno; candidatoPorPagina--; }

            oCandidatoViewModel.RegistroPorPagina = Constantes.RegistrosPorPagina;
            oCandidatoViewModel.sortType = sortDir == "ASC" ? sort : sort + " DESC";
            oCandidatoViewModel.startRowIndex = page;
            oCandidatoViewModel.maximumRows = candidatoPorPagina;
            FQ_Candidato oFQ_Candidato = new FQ_Candidato();
            oCandidatoViewModel.ListaFQ_Candidato = CandidatoServiceControler.ListaCandidatoPaginado(oCandidatoViewModel.FQ_Candidato,
                                                                                    oCandidatoViewModel.sortType,
                                                                                    oCandidatoViewModel.maximumRows,
                                                                                    oCandidatoViewModel.startRowIndex,
                                                                                    out Total);

            oCandidatoViewModel.TotalRegistros = Total;

            oCandidatoViewModel.DescRegistrosPorPagina = UtilWebGrid.ContadorRegistrosWebGrid(
                pageIndex, oCandidatoViewModel.RegistroPorPagina, oCandidatoViewModel.TotalRegistros);

            if (sw)
            {
                return PartialView("BuscarCandidatoSolisitudPV_Grilla", oCandidatoViewModel);
            }

            return View(oCandidatoViewModel);
        }

        public ActionResult Nuevo(Int32 ID = 0)
        {
            SolicitudViewModel oSolicitudViewModel = new SolicitudViewModel();
            oSolicitudViewModel.FQ_Solicitud = new FQ_Solicitud();
            oSolicitudViewModel.ListaFQ_EstadoSolicitud = new ListaFQ_EstadoSolicitud();
            oSolicitudViewModel.FQ_Solicitud = SolicitudServicioControler.SeleccionarCandidato_Nueva_Solicitud(ID);
            oSolicitudViewModel.ListaFQ_EstadoSolicitud = SolicitudServicioControler.ListaEstadoSolicitud();
            oSolicitudViewModel.FQ_Solicitud.FQ_ReferenciaLaboral = new FQ_ReferenciaLaboral();
            oSolicitudViewModel.FQ_Solicitud.FQ_ObservacionSolicitud = new FQ_ObservacionSolicitud();
                    
            oSolicitudViewModel.FQ_Solicitud.Fecha = DateTime.Now;
            oSolicitudViewModel.FQ_Solicitud.FechaEntrevista = DateTime.Now;
            oSolicitudViewModel.FQ_Solicitud.FQ_ReferenciaLaboral.InicioTiempoServicio = DateTime.Now;
            oSolicitudViewModel.FQ_Solicitud.FQ_ReferenciaLaboral.FinTiempoServicio = DateTime.Now;
            oSolicitudViewModel.FQ_Solicitud.FQ_ObservacionSolicitud.FechaRegistro = DateTime.Now;
            oSolicitudViewModel.FQ_Solicitud.FQ_ObservacionSolicitud.Plazo = DateTime.Now;
            

            return View(oSolicitudViewModel);        
        }

        public ActionResult RegistroSolicitud(SolicitudViewModel oSolicitudViewModel, HttpPostedFileBase Adjunto1)
        {
            Int32 resultado = 0;
            try
            {
                oSolicitudViewModel.FQ_Solicitud.Fecha = DateTime.Now;
                oSolicitudViewModel.FQ_Solicitud.FQ_ObservacionSolicitud.FechaRegistro = DateTime.Now;

                String NombreDocumento = Constantes.ValorDefecto;
                String ArchivoFisico = Constantes.ValorDefecto;
                if (Adjunto1 == null)
                {
                    oSolicitudViewModel.FQ_Solicitud.FQ_Anexo.NombreArchivo = NombreDocumento;
                    oSolicitudViewModel.FQ_Solicitud.FQ_Anexo.ArchivoFisico = ArchivoFisico;
                    resultado = SolicitudServicioControler.CrearSolicitud(oSolicitudViewModel.FQ_Solicitud);
                }
                else
                {
                    String RutaArchivo = Constantes.ValorDefecto;
                    RutaArchivo = System.Configuration.ConfigurationManager.AppSettings["AnexoSolicitud"];

                    string NombreArchivo = Adjunto1.FileName; 
                    NombreArchivo = NombreArchivo.Split('\\')[NombreArchivo.Split('\\').Count() - 1];

                    NombreDocumento = NombreArchivo;

                    String Archivo = RutaArchivo + NombreArchivo;

                    String Archivo_A_Eliminar = Server.MapPath(Archivo);

                    if (Adjunto1 != null && Adjunto1.ContentLength > 0)
                    {
                        if (!System.IO.Directory.Exists(Server.MapPath(RutaArchivo)))
                            System.IO.Directory.CreateDirectory(
                                Server.MapPath(RutaArchivo)
                            );

                        if (System.IO.File.Exists(Archivo_A_Eliminar) == true)
                        {
                            System.IO.File.Delete(Archivo_A_Eliminar);
                        }

                        String path = System.IO.Path.Combine(
                            Server.MapPath(RutaArchivo),
                            System.IO.Path.GetFileName(Archivo)
                        );
                        Adjunto1.SaveAs(path);
                    }
                    oSolicitudViewModel.FQ_Solicitud.FQ_Anexo.NombreArchivo = NombreDocumento;
                    oSolicitudViewModel.FQ_Solicitud.FQ_Anexo.ArchivoFisico = Archivo;
                    resultado = SolicitudServicioControler.CrearSolicitud(oSolicitudViewModel.FQ_Solicitud);
                }

            }
            catch (Exception)
            {
                resultado = 4;
            }          

            string mensajeCliente = "";

            switch (resultado)
            {
                case 0:
                    mensajeCliente = Constantes.MensajeError;
                    break;
                case 1:
                    mensajeCliente = Constantes.MensajeGrabar;
                    break;
                case 2:
                    mensajeCliente = Constantes.msjSessionExpiro;
                    break;
                case 3:
                    mensajeCliente = Constantes.MensajeUpdate;
                    break;
                case 4:
                    mensajeCliente = Constantes.MensajeAdjunto;
                    break;
                default:
                    mensajeCliente = Constantes.MensajeGrabar;
                    break;
            }

            Session["mensajeCliente"] = mensajeCliente;

            return RedirectToAction("Nuevo", "Solicitud");
        }

        public ActionResult SolicitudPendiente() 
        {
            SolicitudViewModel oSolicitudViewModel = new SolicitudViewModel();
            oSolicitudViewModel.FQ_Solicitud = new FQ_Solicitud();
            oSolicitudViewModel.FQ_Solicitud.FQ_EstadoSolicitud = new FQ_EstadoSolicitud();
            oSolicitudViewModel.FQ_Solicitud.FQ_Candidato = new FQ_Candidato();
            oSolicitudViewModel.FQ_Solicitud.FQ_Candidato.FQ_TipoCandidato = new FQ_TipoCandidato();
            oSolicitudViewModel.ListaFQ_EstadoSolicitud = SolicitudServicioControler.ListaEstadoSolicitudEntrvista();
            oSolicitudViewModel.ListaFQ_TipoCandidato = CandidatoServiceControler.ListaTipoCandidato();
            return View(oSolicitudViewModel); 
        }


        public ActionResult SolicitudPendientePV_Grilla(Int32 PFQ_EstadoSolicitud_ID = Constantes.ValorCero, Int32 PTipoCandidato_ID = Constantes.ValorCero, String PIDNombreCandidato = Constantes.ValorDefecto, String PIDNumeroDocumentoCandidato = Constantes.ValorDefecto, String sort = "FQ_Solicitud_ID", int page = 0, String sortDir = "DESC")
        {
            int pageIndex = page;
            SolicitudViewModel oSolicitudViewModel = new SolicitudViewModel();
            if (page == Constantes.ValorCero || page == Constantes.MenosUno)
            {
                oSolicitudViewModel.FQ_Solicitud = new FQ_Solicitud()
                {
                    FQ_EstadoSolicitud = new FQ_EstadoSolicitud()
                    {
                        FQ_EstadoSolicitud_ID = PFQ_EstadoSolicitud_ID
                    },
                    FQ_Candidato = new FQ_Candidato()
                    {
                        FQ_TipoCandidato = new FQ_TipoCandidato()
                        {
                            TipoCandidato_ID = PTipoCandidato_ID
                        },
                        Nombre = PIDNombreCandidato,
                        NumeroDocumento = PIDNumeroDocumentoCandidato,
                    },
                };
            }

            if (page != Constantes.MenosUno && !(page > Constantes.ValorUno))
            {
                page = Constantes.ValorUno;
            }
            bool sw = false;
            if (page == Constantes.MenosUno)
            {
                page = Constantes.ValorUno;
                sw = true;
                Session["oSolicitudViewModel.FQ_Solicitud"] = null;
            }

            if (oSolicitudViewModel == null)
            {
                oSolicitudViewModel = new SolicitudViewModel();
            }

            if (Session["oSolicitudViewModel.FQ_Solicitud"] == null)
            {
                Session["oSolicitudViewModel.FQ_Solicitud"] = oSolicitudViewModel.FQ_Solicitud;
            }
            else
            {
                oSolicitudViewModel.FQ_Solicitud = (FQ_Solicitud)Session["oSolicitudViewModel.FQ_Solicitud"];
            }
            int Total;

            int SolicitudPorPagina = Constantes.RegistrosPorPagina;
            if (page == Constantes.ValorUno) { page = Constantes.ValorCero; } else { page = ((page - Constantes.ValorUno) * SolicitudPorPagina) + Constantes.ValorUno; SolicitudPorPagina--; }

            oSolicitudViewModel.RegistroPorPagina = Constantes.RegistrosPorPagina;
            oSolicitudViewModel.sortType = sortDir == "ASC" ? sort : sort + " DESC";
            oSolicitudViewModel.startRowIndex = page;
            oSolicitudViewModel.maximumRows = SolicitudPorPagina;
            FQ_Candidato oFQ_Candidato = new FQ_Candidato();
            oSolicitudViewModel.ListaFQ_Solicitud = SolicitudServicioControler.ListaEstadosSolicitus_Candidato(oSolicitudViewModel.FQ_Solicitud,
                                                                                    oSolicitudViewModel.sortType,
                                                                                    oSolicitudViewModel.maximumRows,
                                                                                    oSolicitudViewModel.startRowIndex,
                                                                                    out Total);

            oSolicitudViewModel.TotalRegistros = Total;

            oSolicitudViewModel.DescRegistrosPorPagina = UtilWebGrid.ContadorRegistrosWebGrid(
                pageIndex, oSolicitudViewModel.RegistroPorPagina, oSolicitudViewModel.TotalRegistros);

            if (sw)
            {
                return PartialView("SolicitudPendientePV_Grilla", oSolicitudViewModel);
            }

            return View(oSolicitudViewModel);
        }

        public ActionResult Editar(Int32 ID = 0)
        {
            SolicitudViewModel oSolicitudViewModel = new SolicitudViewModel();
            oSolicitudViewModel.FQ_Solicitud = new FQ_Solicitud();
            oSolicitudViewModel.FQ_Solicitud = SolicitudServicioControler.SeleccionarSolicitud(ID);
            oSolicitudViewModel.ListaFQ_EstadoSolicitud = SolicitudServicioControler.ListaEstadoSolicitud();

            return View(oSolicitudViewModel);
        }

        public ActionResult ActualizarSolicitud(SolicitudViewModel oSolicitudViewModel, HttpPostedFileBase Adjunto1)
        {
            Int32 resultado = 0;
            try
            {            

                String NombreDocumento = Constantes.ValorDefecto;
                String ArchivoFisico = Constantes.ValorDefecto;
                if (Adjunto1 == null)
                {
                    oSolicitudViewModel.FQ_Solicitud.FQ_Anexo.NombreArchivo = NombreDocumento;
                    oSolicitudViewModel.FQ_Solicitud.FQ_Anexo.ArchivoFisico = ArchivoFisico;
                    resultado = SolicitudServicioControler.ActualizarSolicitud(oSolicitudViewModel.FQ_Solicitud);
                }
                else
                {
                    String RutaArchivo = Constantes.ValorDefecto;
                    RutaArchivo = System.Configuration.ConfigurationManager.AppSettings["AnexoSolicitud"];

                    string NombreArchivo = Adjunto1.FileName;
                    NombreArchivo = NombreArchivo.Split('\\')[NombreArchivo.Split('\\').Count() - 1];

                    NombreDocumento = NombreArchivo;

                    String Archivo = RutaArchivo + NombreArchivo;

                    String Archivo_A_Eliminar = Server.MapPath(Archivo);

                    if (Adjunto1 != null && Adjunto1.ContentLength > 0)
                    {
                        if (!System.IO.Directory.Exists(Server.MapPath(RutaArchivo)))
                            System.IO.Directory.CreateDirectory(
                                Server.MapPath(RutaArchivo)
                            );

                        if (System.IO.File.Exists(Archivo_A_Eliminar) == true)
                        {
                            System.IO.File.Delete(Archivo_A_Eliminar);
                        }

                        String path = System.IO.Path.Combine(
                            Server.MapPath(RutaArchivo),
                            System.IO.Path.GetFileName(Archivo)
                        );
                        Adjunto1.SaveAs(path);
                    }
                    oSolicitudViewModel.FQ_Solicitud.FQ_Anexo.NombreArchivo = NombreDocumento;
                    oSolicitudViewModel.FQ_Solicitud.FQ_Anexo.ArchivoFisico = Archivo;
                    resultado = SolicitudServicioControler.ActualizarSolicitud(oSolicitudViewModel.FQ_Solicitud);
                }

            }
            catch (Exception)
            {               
                resultado = 4;
                return RedirectToAction("Editar/" + oSolicitudViewModel.FQ_Solicitud.FQ_Solicitud_ID, "Solicitud");
            }

            string mensajeCliente = "";

            switch (resultado)
            {
                case 0:
                    mensajeCliente = Constantes.MensajeError;
                    break;
                case 1:
                    mensajeCliente = Constantes.MensajeGrabar;
                    break;
                case 2:
                    mensajeCliente = Constantes.msjSessionExpiro;
                    break;
                case 3:
                    mensajeCliente = Constantes.MensajeUpdate;
                    break;
                case 4:
                    mensajeCliente = Constantes.MensajeAdjunto;
                    break;
                default:
                    mensajeCliente = Constantes.MensajeGrabar;
                    break;
            }

            Session["mensajeCliente"] = mensajeCliente;

            return RedirectToAction("Editar/"+oSolicitudViewModel.FQ_Solicitud.FQ_Solicitud_ID, "Solicitud");
        }

        public ActionResult Visualizar(Int32 ID = 0)
        {
            SolicitudViewModel oSolicitudViewModel = new SolicitudViewModel();
            oSolicitudViewModel.FQ_Solicitud = new FQ_Solicitud();
            oSolicitudViewModel.FQ_Solicitud = SolicitudServicioControler.SeleccionarSolicitud(ID);
            oSolicitudViewModel.ListaFQ_EstadoSolicitud = SolicitudServicioControler.ListaEstadoSolicitud();

            return View(oSolicitudViewModel);
        }
    }
}
